#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include "QtDebug"
#include "QTextEdit"
#include "QLineEdit"

/****************************************
* 作者/公司  : 有志小青年
* 函数介绍   : 构造
* 输入参数   :
* 输出参数   :
* 返回值     :
*****************************************/
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    udpsend = new UdpSender();


    // 图表
    m_chart = new QChart;
    QChartView *chartView = new QChartView(m_chart);
//    v.setRubberBand(QChartView::HorizontalRubberBand);
    chartView->setRubberBand(QChartView::RectangleRubberBand);
//    chartView->setRubberBand();

    m_series = new QLineSeries;
    m_series1 = new QLineSeries;
    m_chart->addSeries(m_series);
    m_chart->addSeries(m_series1);

    // 开启OpenGL加速
    m_series->setUseOpenGL(true);
    //qDebug()<<m_series->useOpenGL(); //确认是否支持

    // 设置x和y坐标
    QValueAxis *axisX = new QValueAxis;
    axisX->setRange(10,50);
    axisX->setLabelFormat("%g");
    axisX->setTitleText("Time");

    QValueAxis *axisY = new QValueAxis;
    axisY->setRange(-100,100); //设置x
    axisY->setTitleText("PosX");

    m_chart->setAxisX(axisX,  m_series);
    m_chart->setAxisY(axisY, m_series);

    m_chart->setAxisX(axisX,  m_series1);
    m_chart->setAxisY(axisY, m_series1);

    m_chart->legend()->hide();
    m_chart->setTitle("Test");

    // 图表加入layout
    QVBoxLayout *layout = ui->verticalLayout;
    layout->addWidget(chartView);


    // 创建定时器
    timer = new QTimer(this);
    // 设置为重复触发
    timer->setSingleShot(false);
    // 停止定时器
    timer->stop();
    //定时器触发信号槽
    connect(timer, SIGNAL(timeout()), this, SLOT(TimerTimeOut()));
}

/****************************************
* 作者/公司  : 有志小青年
* 函数介绍   : 析构
* 输入参数   :
* 输出参数   :
* 返回值     :
*****************************************/
MainWindow::~MainWindow()
{
    delete m_series1;
    delete m_series;
    delete m_chart;
    delete timer;
    delete udpsend;
    delete ui;
}

/****************************************
* 作者/公司  : 有志小青年
* 函数介绍   : 定时处理函数，数据处理+图形绘制
* 输入参数   :
* 输出参数   :
* 返回值     :
*****************************************/
void MainWindow::TimerTimeOut()
{
    if(udprecive != nullptr)
    {
        if(udprecive->m_data.size() > 0)
        {
            if(datalist.size() > 0)
            {
                if(datalist.at(datalist.size()-1) != udprecive->m_data.data())
                {
                    datalist.append(udprecive->m_data.data());
                    QStringList temp = datalist.at(datalist.size()-1).split(',');
                    // qDebug() << temp.at(2).toDouble() << " " << temp.at(3).toDouble();
                    // 添加线段1的点
                    m_series->append(temp.at(2).toDouble(),temp.at(3).toDouble());
                    // 添加线段2的点
                    m_series1->append(temp.at(2).toDouble(),temp.at(9).toDouble());
                }

                udpsend->send("count"); //数据+1
            }
            else
            {
                datalist.append(udprecive->m_data.data());
                udpsend->send("count"); //数据+1
            }

            qDebug() << "size：" << datalist.size() << udprecive->m_data.data();
        }
        else
        {
            udpsend->send("data"); //获取数据
        }

        udprecive->m_data.clear();
    }
}

/****************************************
* 作者/公司  : 有志小青年
* 函数介绍   : 绘图按键
* 输入参数   :
* 输出参数   :
* 返回值     :
*****************************************/
void MainWindow::on_buttonGetData_clicked()
{
    // 获取控件
    QLineEdit *iptxt = ui->lineEditip;
    QLineEdit *porttxt = ui->lineEditport;

    // 设置ip和端口
    udpsend->initSender(iptxt->text(), porttxt->text().toUInt());
    udpsend->send("connect");

    // 清除已经接收的数据
    if(m_series != nullptr) m_series->clear();
    if(m_series1 != nullptr) m_series1->clear();
    datalist.clear();

    // 设置触发时间为100ms
    timer->start(10);
}
